<?php
	/**
	 * Clase que implementa funciones de usu habitual.
	 * 
	 * @author Miguel Angel Villanueva Rengifo
	 * @version 0.1
	 * @package clases-generales
	 *
	 */
	class View{
		
		/**
		 * Arreglo de archivos Javascript que se desean agregar en la cabecera.
		 *
		 * @var array
		 * @access public
		 */
		public $JS;
		
		/**
		 * Arreglo de archivos CSS que se desean agregar en la cabecera.
		 *
		 * @var array
		 * @access public
		 */
		public $CSS;
		
		/**
		* Nombre de la vista o pagina
        * @var string
        * @access private
        */
        private $pagina;
         
        /**
        * Valor por default 'default'
        * @var string
        * @access private
        */
        private $tipo;
         
        /**
        * Variable que contiene todas las varibles que se usaran el en la vista
        * @var Object
        * @access private       
        */
        private $vars;
         
        /**
        * Arreglo que contiene variables extras.
        * @var array
        * @access private
        */
        private $extractVars;
         
        /**
        * Variable ruta de la aplicacion dentro del servidor(ejemplo:/var/www/cultivos)
        * @var string
        * @access private       
        */
        private $rootDir;
        
        /**
         * Nombre de la plantilla que se usara como base para la creacion de las paginas.
         *
         * @var string
         * @access private
         */
        private $plantilla;
        
        /**
         * Nombre del directorio raiz donde estan las vistas. 
         * El directorio raiz para las plantillas o vistas es el directorio view/.
         *
         * @var string
         * @access private
         */
        private $dir_principal;
        
        
        public $datos_extra;
        
        private $boddy;
        
        /**
        * Constructor de la clase View.
        * @param string $pagina Nombre de la pagina que se usara como vista.
        * @param string $plantilla Nombre de la plantilla que se usara para cargar la pagina.
        * @param string $dir Directorio raiz donde estan las plantillas o vistas. El directorio debe encontrarse 
        * en el directorio '/view' y terminar con el simbolo '/'.
        */
        public function __construct($pagina='',$plantilla='main',$dir='')
        {
           $this->rootDir       = $GLOBALS['rootDir'];
                                
           $this->pagina      = "view/$pagina";
           $this->dir_principal=$dir;
           $this->setPlantilla($plantilla);
           $this->message     = "";
           $this->tipo        = 'default'; 
           $this->extractVars = 'true';                
           $this->JS=array();
           $this->CSS=array();
           $this->datos_extra=array();
           //para llenar el combo y el menu de categorias generales ejemplo ACTIVACIONES, CREDITOS
		   //$this->datos_extra['cbollenarcategoria']=Categorias::getCategorias()->toArray();
		   
        }
        
        public function AddCss($css){
        	$this->CSS[]=$css;
        }
        
        public function AddJavaScript($java_script){
        	$this->JS[]=$java_script;
        }
        
        /**
         * Asignar Plantilla Principal para todas las pginas.
         *
         * @param string $plantilla Nombre del archivo que se usara como plantilla principal.
         */
        public function setPlantilla($plantilla='main')
		{
			switch($plantilla){
				case "main":
					$this->plantilla = "view/".$this->dir_principal."index.php";
					break;
				case "simple":
					$this->plantilla = "view/".$this->dir_principal."/index_simple.php";
					break;
				case "clear":
					$this->plantilla = "";
					break;	
				default:
					$this->plantilla = "view/".$this->dir_principal."/index.php";
					break;
			}
			
		}
        
        /**
        * Metodo para establecer pagina para la vista.
        * 
        * @param string $pagina Nombre de la pagina a establecer en la vista.
        */ 
        public function setPagina($pagina){
        	$this->pagina='view/'.$pagina;
        }
        
        /**
        * Obtener pagina apartir del nombre de la vista y creando las variables creadas para dicha vista
        * 
        * @param bool $buffer Indica si se retorna el contenido de una pagina o la cargara directamente.
        */
        public function getPage($buffer=false)
        {
           
			if($this->extractVars && is_array($this->vars) && !empty($this->vars)){
           		extract($this->vars);
        	}               
                
        	if(!empty($this->redirect))
         	{                  
            	new Redirect($this->redirect[0],$this->redirect[1],$this->redirect[2],$this->redirect[3]);
            	return;
        	}
            if(is_file(addslashes($this->pagina))){
            	if($buffer){
            		ob_start();	
            		require_once($this->pagina);
            		$contenido=ob_get_contents();
            		 ob_clean();
            	  	return $contenido;
            	}else {
            		if(empty($this->boddy))
            			require_once($this->pagina);
            		else 
            			echo $this->boddy;
            	}
            }else{                  
                die("No se pudo cargar pagina o la pagina no existe...");
            }               
        }
         
        /**
        * Asignar variables extras(@link $extractVars).
        * 
        * @param array $extractVars
        */      
        public function setExtractVars($extractVars)
        {
        	$this->extractVars = $extractVars;
        }
         
        /**
        * Asignar variables que se usaran en la vista como varibles PHP(@link $vars).
        * 
        * @param string $ref Nombre que tendra la varible dentro de la vista.
        * @param string $dat Nombre de la varible que contiene la informacion a pasar.   
        */
        public function setVars($ref,$dat='')
        {
        	if(is_array($ref)){
            	$this->vars = $ref;                
            }else if (is_string($ref)){
            	$this->vars[$ref] = $dat;                
            }
                   
        }

        /**
        * Mostrar la pagina apartir de la vista
        */      
        public function Display($boddy='')
        {               
        	$this->boddy=$boddy;
        	if(!ereg("\?",$_SERVER['REQUEST_URI'])){
            	$_SERVER['REQUEST_URI'].='?';
            }else{
            	$_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF']."?".Util::implode_assoc('=','&',$_GET);
            }
     	    if(!empty($this->plantilla)){
            	require_once $this->plantilla;	
        	}else{
        		$this->getPage();            	
        	}	
			return;
         }
                 
	}
?>